package com.xhj.mybatis.executor.result;

import com.xhj.mybatis.reflection.factory.ObjectFactory;
import com.xhj.mybatis.session.ResultContext;
import com.xhj.mybatis.session.ResultHandler;

import java.util.ArrayList;
import java.util.List;

/**
 * DefaultResultHandler
 *
 * @author XJks
 * @description DefaultResultHandler 是 MyBatis 默认的结果处理器实现类，用于收集 SQL 查询返回的结果对象。
 */
public class DefaultResultHandler implements ResultHandler<Object> {

    /**
     * 用于存储查询结果对象的列表
     */
    private final List<Object> list;

    /**
     * 默认构造方法，初始化一个空的 ArrayList 用于存储结果。
     */
    public DefaultResultHandler() {
        list = new ArrayList<>();
    }

    /**
     * 带参数的构造方法，允许通过 ObjectFactory 创建 List 实例。
     * 这样可以自定义 List 的实现类型。
     *
     * @param objectFactory 用于创建 List 实例的对象工厂
     */
    public DefaultResultHandler(ObjectFactory objectFactory) {
        list = objectFactory.create(List.class);
    }

    @Override
    public void handleResult(ResultContext<?> context) {
        // 将当前结果对象添加到 list 中
        list.add(context.getResultObject());
    }

    /**
     * 获取所有收集到的结果对象列表。
     *
     * @return 结果对象的 List
     */
    public List<Object> getResultList() {
        return list;
    }

}

